import rclpy
from rclpy.node import Node
class Paramserver(Node):
    def __init__(self):
        super().__init__("param_server_node_py",allow_undeclared_parameters=True)
        self.get_logger().info("参数服务器")
    def declare_param(self):
        self.get_logger().info("新增参数")
        self.declare_parameter("car_name","Tiger")
        self.declare_parameter("wideth",1.55)
        self.declare_parameter("wheels",5) 
        self.set_parameters([rclpy.Parameter("haha",value="xixi")]) 
        #ros2 param list 
        #ros2 param get /param_server_node_py car_name
    def get_param(self):
        self.get_logger().info("查询参数")
        car=self.get_parameter("car_name")#返回一个parameter值
        self.get_logger().info(f"{car.name}={car.value}")
        param_list=self.get_parameters(["car_name","wideth","wheels"])#传入的参数是一个数组
        for param in param_list:
            self.get_logger().info(f"{param.name}={param.value}")
        self.get_logger().info(f"包含 car_name吗?,{self.has_parameter('car_name')}")
        self.get_logger().info(f"包含 height吗?,{self.has_parameter('height')}")

    def updata_param(self):
        self.get_logger().info("修改参数")
        self.set_parameters([rclpy.Parameter("car_name",value="Mouse")])
        car=self.get_parameter("car_name")#返回一个parameter值
        self.get_logger().info(f"修改后{car.name}={car.value}")
    def del_param(self):
        self.get_logger().info("删除参数")
        self.get_logger().info(f"删除前，包含 car_name吗?,{self.has_parameter('car_name')}")
        self.undeclare_parameter("car_name")
        self.get_logger().info(f"删除后，包含 car_name吗?,{self.has_parameter('car_name')}")
        
def main():
    rclpy.init()
    node=Paramserver()
    node.declare_param()
    node.get_param()
    node.updata_param()
    node.del_param()
    rclpy.spin(node)
    rclpy.shutdown()

if __name__=='__main__':
    main()